package util;

import com.google.common.base.Charsets;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
import com.google.common.math.IntMath;
import com.google.common.math.LongMath;

/**
 * Created by jeff on 2018/4/18.
 * hash工具类
 */
public class HashUtil {


    /**
     * 获取分表的表号（字符串）
     *
     * @param hashString 需要取模的字符串
     * @param mod 取模数
     *
     * @return 表号
     */
    public static String getStringMod(String hashString,Integer mod){
        //采用MD5作为散列函数
        final HashFunction hf= Hashing.md5();
        //对字符串进行hash
        final HashCode hc = hf.newHasher()
                .putString(hashString, Charsets.UTF_8)
                .hash();

        return Strings.padStart(String.valueOf(IntMath.mod(hc.asInt(),mod)),4,'0');
    }

    /**
     * 获取分表的表号(数字)
     *
     * @param num 需要取模的数字
     * @param mod 取模数
     *
     * @return 表号
     */
    public static String  getIntegerMod(Long num,Integer mod){
        return Strings.padStart(String.valueOf(LongMath.mod(num,mod)),4,'0');
    }
}
